import uniConfig from '@/uni.config.js';

// #ifdef APP-PLUS
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import callCheckVersion from '@/uni_modules/uni-upgrade-center-app/utils/call-check-version';
import interceptorChooseImage from '@/uni_modules/json-interceptor-chooseImage/js_sdk/main.js';
// #endif

export default async function() {
	let loginConfig = uniConfig.router.login
	//清除有配置但设备环境不支持的登陆项
	// #ifdef APP-PLUS
	// await new Promise((callBack) => {
	// 	plus.oauth.getServices(oauthServices => {
	// 		console.log('-------------------')
	// 		loginConfig = loginConfig.filter(item => {
	// 			console.log('-------------------')
	// 			if (["univerify", "weixin", "apple"].includes(item)) {
	// 				let index = oauthServices.findIndex(e => e.id == item)
	// 				if (index == -1) {
	// 					return false
	// 				} else {
	// 					return oauthServices[index].nativeClient
	// 				}
	// 			} else {
	// 				return true
	// 			}
	// 		})
	// 		// if (loginConfig.includes('univerify')) { //一键登录 功能预登录
	// 		// 	uni.preLogin({
	// 		// 		provider: 'univerify',
	// 		// 		complete: e => {
	// 		// 			console.log(e);
	// 		// 		}
	// 		// 	})
	// 		// }
	// 		callBack()
	// 	}, err => {
	// 		console.error('获取服务供应商失败：' + JSON.stringify(err));
	// 	})
	// })
	// #endif
	
	//非app移除：一键登录、苹果登陆；h5移除微信登陆，如果你做微信公众号登陆需要将此行移除
	// #ifndef APP-PLUS
	loginConfig = loginConfig.filter(item => {
		return ![
			'univerify',
			'apple',
			// #ifdef H5
			'weixin'
			// #endif
		].includes(item)
	})
	// #endif
	
	uniConfig.router.login = loginConfig
	
	// uniConfig挂载到getApp().globalData.config
	setTimeout(() => {
		getApp({
			allowDefault: true
		}).globalData.config = uniConfig;
	}, 1)
	
	// 初始化xcxVersion（仅小程序生效）
	// #ifdef MP-WEIXIN
	initXcxVersion();
	// #endif
	
	// #ifdef APP-PLUS
	// 初始化appVersion（仅app生效）
	initAppVersion();
	// 实现，路由拦截。当应用无访问摄像头/相册权限，引导跳到设置界面
	interceptorChooseImage()
	// #endif
	
	const Debug = true;
	
	//自定义路由拦截
	const {
		"router": {
			needLogin,
			visitor,
			login
		}
	} = uniConfig //需要登录的页面
	let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
	list.forEach(item => { //用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
		uni.addInterceptor(item, {
			invoke(e) { // 调用前拦截
				//获取用户的token
				const token = uni.getStorageSync('user_token'),
				//获取要跳转的页面路径（url去掉"?"和"?"后的参数）
				url = e.url.split('?')[0];
				//获取要前往的页面路径（即url去掉"?"和"?"后的参数）
				// pages = getCurrentPages(),
				// fromUrl = pages[pages.length - 1].route;
				//拦截强制登录页面
				let pass = true
				//pattern
				if (needLogin) {
					pass = needLogin.every((item) => {
						if(typeof(item) == 'object' && item.pattern){
							return !item.pattern.test(url)
						}
						return url != item
					})
				}
				if (visitor) {
					pass = visitor.some((item) => {
						if(typeof(item) == 'object' && item.pattern){
							return item.pattern.test(url)
						}
						return url == item
					})
				}
				if (!pass && (token == '' || token == null)) {
					uni.showToast({
						title: '请先登录',
						icon: 'none'
					})
					
					// #ifdef MP-WEIXIN
					uni.navigateTo({
						url: "/pages/login/weixin_oauth_login"
					})
					// #endif
					// #ifndef MP-WEIXIN
					uni.navigateTo({
						url: "/pages/login/form_login"
					})
					// #endif
					
					return false
				}
				return e
			},
			fail(err) { // 失败回调拦截 
				if (Debug) {
					console.log(err);
					uni.showModal({
						content: JSON.stringify(err),
						showCancel: false
					});
				}
			}
		})
	})
	
	// #ifdef APP-PLUS
	// 监听并提示设备网络状态变化
	uni.onNetworkStatusChange(res => {
		// console.log(res.isConnected);
		// console.log(res.networkType);
		if (res.networkType != 'none') {
			uni.showToast({
				title: '当前网络类型：' + res.networkType,
				icon: 'none',
				duration: 3000
			})
		} else {
			uni.showToast({
				title: '网络类型：' + res.networkType,
				icon: 'none',
				duration: 3000
			})
		}
	});
	// #endif
	
}


/**
 * // 初始化appVersion
 */
function initAppVersion() {
	let appid = plus.runtime.appid;
	plus.runtime.getProperty(appid, (wgtInfo) => {
		let appVersion = plus.runtime;
		let currentVersion = appVersion.versionCode > wgtInfo.versionCode ? appVersion : wgtInfo;
		getApp({
			allowDefault: true
		}).appVersion = {
			...currentVersion,
			appid,
			hasNew: false
		}
		// 检查更新小红点
		callCheckVersion().then(res => {
			console.log(res)
			// console.log('检查是否有可以更新的版本', res);
			if (res.result.code > 0) {
				// 有新版本
				getApp({
					allowDefault: true
				}).appVersion.hasNew = true;
				
				checkUpdate(res.result)
				// updateUseModal(res.result)
				
				// uni.showModal(res.result)
				// uni.navigateTo({
				//     url: '/uni_modules/uni-upgrade-center-app/pages/upgrade-popup'
				// });
			}
		})
	});
	// 检查更新
}



/**
 * // 初始化xcxVersion
 */
function initXcxVersion() {
	const updateManager = uni.getUpdateManager();
	updateManager.onCheckForUpdate(function (res) {
		// 请求完新版本信息的回调
		// console.log(res.hasUpdate);
	});
	
	updateManager.onUpdateReady(function (res) {
		uni.showModal({
			title: '更新提示',
			content: '新版本已经准备好，是否重启应用？',
			success(res) {
				if (res.confirm) {
					// 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
					updateManager.applyUpdate();
				}
			}
		});
	});

	updateManager.onUpdateFailed(function (res) {
		// 新的版本下载失败
	});
}
